import java.io.IOException;

/**
 * COSC 455 Programming Languages: Implementation and Design.
 * 
 * A Simple Syntax Analyzer adapted from Sebesta (2010) by Josh Dehlinger,
 * modified by Adam Conover (2012) and interfaced by Josh Dehlinger (2013).
 * 
 * Note that these are not the only methods necessary to parse the BNF grammar
 * rules. You will likely need to add new methods to your implementaion of this
 * interface.
 * 
 */
public interface SyntaxAnalyzer {

	/**
	 * This method implements the BNF grammar rule for the document annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException
	 */
	void document() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the head annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void head() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the title annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void title() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the paragraph annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void paragraph() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the bold annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void bold() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the italics annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void italics() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the list annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void list() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the item annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void item() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the audio annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void audio() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the video annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void video() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the define annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void define() throws CompilerException, IOException;

	/**
	 * This method implements the BNF grammar rule for the use annotation.
	 * 
	 * @throws CompilerException
	 */
	void use() throws CompilerException, IOException;
	
	/**
	 * This method implements the BNF grammar rule for the inner paragraph annotation.
	 * 
	 * @throws CompilerException
	 */
	void innerParagraph() throws CompilerException, IOException;
	
	/**
	 * This method implements the BNF grammar rule for the inner text annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void innerText() throws CompilerException, IOException;
	
	/**
	 * This method implements the BNF grammar rule for the inner list annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void innerList() throws CompilerException, IOException;
	
	/**
	 * This method implements the BNF grammar rule for the text annotation.
	 * 
	 * @throws CompilerException
	 * @throws IOException 
	 */
	void text() throws CompilerException, IOException;
	
	/**
	 * This method implements the BNF grammar rule for the new line annotation.
	 * 
	 * @throws CompilerException
	 */
	void newLine() throws CompilerException, IOException;
}